/*
 * @Author: Freude Xu
 * @Date: 2021-10-07 17:01:31
 * @LastEditors: Freude Xu
 * @LastEditTime: 2021-10-07 18:30:31
 * @Description: 
 */
var that;
class Tab {
    constructor(id) {
            //获取元素
            that = this;
            this.main = document.querySelector(id);
            this.add = this.main.querySelector('.tabadd');
            //li的父元素
            this.ul = this.main.querySelector('.fisrstnav ul:first-child');
            //section的父元素
            this.fsection = this.main.querySelector('.tabscon')
            this.init();
        }
        //初始化：获取li和section，并且为其清楚样式
    init() {
            //调用获取li和section
            this.updateNode();
            //init初始化操作，让相关元素绑定事件
            this.add.onclick = this.addTab;
            for (var i = 0; i < this.lis.length; i++) {
                this.lis[i].index = i;
                this.lis[i].onclick = this.toggleTab;
                this.remove[i].onclick = this.removeTab;
                this.spans[i].ondblclick = this.editTab;
                this.sections[i].ondblclick = this.editTab;
            }
        }
        //获取所有的li和section
    updateNode() {
            this.lis = this.main.querySelectorAll('li');
            this.sections = this.main.querySelectorAll('section');
            //remove写在update中的原因：动态添加元素，需要重新获取对应的元素
            this.remove = this.main.querySelectorAll('.icon-guanbi');
            this.spans = this.main.querySelectorAll('.fisrstnav li span:first-child');
        }
        //1.切换功能
    toggleTab() {
            //改变指向
            that.clearClass();
            //this指向的是li
            this.className = 'liactive';
            that.sections[this.index].className = 'conactive';
        }
        //排它思想，清除样式(清除所有人，在给自己加上样式，所以需要写在加样式的前面)
    clearClass() {
            for (var i = 0; i < this.lis.length; i++) {
                this.lis[i].className = '';
                this.sections[i].className = '';
            }
        }
        //2.添加功能
    addTab() {
            //清除多出来的选项卡
            that.clearClass();
            //创建li和对应的section
            var li = '<li class="liactive"><span>新选项卡 </span><span class="iconfont icon-guanbi"></span></li>';
            var section = '<section class="conactive">新选项卡</section>'
                //追加元素
            that.ul.insertAdjacentHTML('beforeend', li);
            that.fsection.insertAdjacentHTML('beforeend', section);
            //调用init方法，可以重新获取li和section并将它们初始化样式
            that.init();
        }
        //3.删除功能
    removeTab(e) {
            e.stopPropagation(); // 阻止冒泡 防止触发li 的切换点击事件
            var index = this.parentNode.index;
            console.log(index);
            // 根据索引号删除对应的li 和section   remove()方法可以直接删除指定的元素
            that.lis[index].remove();
            that.sections[index].remove();
            that.init();
            // 当我们删除的不是选中状态的li 的时候,原来的选中状态li保持不变
            if (document.querySelector('.liactive')) return;
            // 当我们删除了选中状态的这个li 的时候, 让它的前一个li 处于选定状态
            index--;
            // 手动调用我们的点击事件  不需要鼠标触发
            that.lis[index] && that.lis[index].click();
        }
        //4.修改功能
    editTab() {
        var str = this.innerHTML;
        // 双击禁止选定文字
        window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
        // alert(11);
        this.innerHTML = '<input type="text" />';
        var input = this.children[0];
        input.value = str;
        input.select(); // 文本框里面的文字处于选定状态
        // 当我们离开文本框就把文本框里面的值给span 
        input.onblur = function() {
            this.parentNode.innerHTML = this.value;
        };
        // 按下回车也可以把文本框里面的值给span
        input.onkeyup = function(e) {
            if (e.keyCode === 13) {
                // 手动调用表单失去焦点事件  不需要鼠标离开操作
                this.blur();
            }
        }
    }
}
new Tab('#tab');